home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / kowin / archive / sys / kowin14s.lzh / corlib / MgScrollOpen.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-09-07  |  4.0 KB  |  167 lines

  1. /*    Copyright 1992 H.Ogasawara (COR.)    */
  2. /* MonoGusaLib -> Mglib*/
  3.  
  4. #include    "corlib.h"
  5. #include    <winop.h>
  6. #include    "MgProg.h"
  7.  
  8. int        ScOffx= 0,
  9.         ScOffy= 0;
  10.  
  11. static
  12. SCExec( wp, info )
  13. WindowID    wp;
  14. EventInfo    *info;
  15. {
  16.     MgLibPack    *dp;
  17.     if( info->option == EventOpen ){
  18.         WindowSetClientData( wp, 0, __Mg_Dummy );
  19.         WindowSetEventAttr( wp, EventAttrDefault|EventUserON );
  20.         (*__Mg_Dummy->exec)( wp, info );
  21.         return    TRUE;
  22.     }
  23.     dp= WindowGetClientPointer( wp );
  24.     switch( info->option ){
  25.     case EventRedraw:
  26.         if( !(*dp->exec)( wp, info ) ){
  27.             DrawBuf    dbuf[1];
  28.             DrawSetClear( dbuf, 1 );
  29.             WindowDraw( wp, dbuf, 1 );
  30.         }
  31.         return    TRUE;
  32.     case EventUser:
  33.         if( !(*dp->exec)( wp, info ) ){
  34.             char    **pp;
  35.             switch( info->ComData ){
  36.             default:
  37.                 return    FALSE;
  38.             case UserStrings:
  39.                 for( pp= info->ComBuffer ; *pp ;)
  40.                     __Mg_SendKeyString( wp, info, *pp++ );
  41.             case UserString:
  42.             case UserPaste:
  43.                 __Mg_SendKeyString( wp, info, info->ComBuffer );
  44.             }
  45.         }
  46.         return    TRUE;
  47.     default:
  48.         return    (*dp->exec)( wp, info );
  49.     }
  50.     return    FALSE;
  51. }
  52.  
  53. static
  54. DPExec( wp, info )
  55. WindowID    wp;
  56. EventInfo    *info;
  57. {
  58.     MgLibPack    *dp;
  59.     static short    resizeflag= FALSE;
  60.     if( info->option == EventOpen ){
  61.         WindowSetClientData( wp, 0, dp= __Mg_Dummy );
  62.         WindowSetEventAttr( wp, EventAttrDefault|EventUserON );
  63.         WindowScrollOpen( ScOffx, ScOffy,
  64.                     info->h+ScOffx, info->v+ScOffy,
  65.                     wp, dp->maxh, dp->maxv,
  66.                     DirectionX|DirectionY, 16, 16, SCExec ),
  67.         dp->zoom.zflag= FALSE;
  68.         WindowRedraw( wp );
  69.         return    TRUE;
  70.     }
  71.     dp= WindowGetClientPointer( wp );
  72.     switch( info->option ){
  73.     case EventRedraw:
  74.         if( !resizeflag ){
  75.             DrawBuf    dbuf[1];
  76.             int    h, v;
  77.             WindowGetViewSize( wp, &h, &v );
  78.             DrawSetLine( dbuf, h-10, v-10, h-1, v-1, 1, OptionFill );
  79.             WindowDraw( wp, dbuf, 1 );
  80.             WindowRedraw( WindowGetChildTop(wp) );
  81.         }
  82.         return    TRUE;
  83.     case EventClose:
  84.         if( !(*dp->exec)( wp, info ) ){
  85.             WindowClose( wp );
  86.             WindowConnectionClose();
  87.         }
  88.         free( dp );
  89.         return    TRUE;
  90.     case EventIconify:
  91.         if( !(*dp->exec)( wp, info ) )
  92.             IconEnt( wp, (char*)GetTitleAddress(wp), AttrDefault, 12 );
  93.         return    TRUE;
  94.     case EventResize:
  95.         if( !(*dp->exec)( wp, info ) ){
  96.             if( info->h > dp->maxh+13 )
  97.                 info->h= dp->maxh+13;
  98.             if( info->v > dp->maxv+13 )
  99.                 info->v= dp->maxv+13;
  100.             resizeflag= TRUE;
  101.             WindowResize( wp, info->x, info->y, info->h, info->v );
  102.             WindowResize( WindowGetChildTop(wp), ScOffx, ScOffy,
  103.                     info->h-ScOffx, info->v-ScOffy );
  104.             resizeflag= FALSE;
  105.             WindowRedraw( wp );
  106.         }
  107.         return    TRUE;
  108.     case EventZoom:
  109.         if( !(*dp->exec)( wp, info ) ){
  110.             info->option= EventResize;
  111.             if( dp->zoom.zflag= !dp->zoom.zflag ){
  112.                 WindowGetPosition( wp, &dp->zoom.zx, &dp->zoom.zy );
  113.                 WindowGetViewSize( wp, &dp->zoom.zh, &dp->zoom.zv );
  114.                 WindowSendEvent( wp, info );
  115.             }else{
  116.                 info->x= dp->zoom.zx;
  117.                 info->y= dp->zoom.zy;
  118.                 info->h= dp->zoom.zh;
  119.                 info->v= dp->zoom.zv;
  120.                 WindowSendEvent( wp, info );
  121.             }
  122.         }
  123.         return    TRUE;
  124.     case EventMouseSwitch:
  125.         if( info->LeftON ){
  126.             int    h, v;
  127.             WindowGetViewSize( wp, &h, &v );
  128.             if( info->x >= h-10 && info->y >= v-10 ){
  129.                 WindowResizeOperation( wp, info );
  130.                 return    TRUE;
  131.             }
  132.         }
  133.     default:
  134.         return    WindowSendEvent( WindowGetChildTop(wp), info );
  135.     }
  136.     return    FALSE;
  137. }
  138.  
  139. WindowID
  140. MgWindowScrollOpen( x, y, h, v, title, maxh, maxv, mode, Exec )
  141. char    *title;
  142. int    (*Exec)();
  143. {
  144.     if( !(__Mg_Dummy= (MgLibPack*)malloc( sizeof( MgLibPack ) )) )
  145.         return    NULL;
  146.  
  147.     __Mg_Dummy->exec= Exec;
  148.     __Mg_Dummy->attr= (mode>>8) & WindowAttrGraphicUse;
  149.     __Mg_Dummy->maxh= maxh;
  150.     __Mg_Dummy->maxv= maxv;
  151.     return    WindowTitleOpen( x, y, h, v, NULL, title,
  152.             Resize|Close|Push|(mode&MgTitleItem), DPExec );
  153. }
  154.  
  155. WindowID
  156. MgWindowScrollOpenArgs( x, y, h, v, title, argc, argv, maxh, maxv, mode, Exec )
  157. char    *title, **argv;
  158. int    (*Exec)();
  159. {
  160.     if( mode & MgSwitchHV)
  161.         AnalyzeArgs( argc, argv, &x, &y, &h, &v );
  162.     else
  163.         AnalyzeArgs( argc, argv, &x, &y, NULL, NULL );
  164.     return    MgWindowScrollOpen( x, y, h, v, title, maxh, maxv, mode, Exec );
  165. }
  166.  
  167.